package ltd.faw.car.prop;

import ltd.faw.car.prop.HQCarPropertyValue;
import ltd.faw.car.prop.IHQCarPropertyEventListener;
import ltd.faw.car.prop.RetValue;
import ltd.faw.car.prop.HQCarPropertyExtParameter;
import ltd.faw.car.prop.HQRegisterParameter;
import android.os.ParcelFileDescriptor;
import ltd.faw.car.prop.MultiRequestBody;
import ltd.faw.car.prop.MultiResponseBody;
import ltd.faw.car.prop.HQAPIConfig;

interface IHQCarProperty {

    oneway void registerListener(int propertyId, in IHQCarPropertyEventListener listener);
    oneway void registerIdentifyListener(int propertyId, int identify, in IHQCarPropertyEventListener listener);
    oneway void unregisterListener(int propertyId, in IHQCarPropertyEventListener listener);
    oneway void unregisterIdentifyListener(int propertyId, int identify, in IHQCarPropertyEventListener listener);

    HQCarPropertyValue getProperty(int propertyId);
    HQCarPropertyValue getPropertyWith(int propertyId, in HQCarPropertyExtParameter param);
    RetValue setProperty(in HQCarPropertyValue value);

    oneway void dump(in ParcelFileDescriptor fd, in int[] ids);

    oneway void registerListenerWithParameter(in HQRegisterParameter parameter, in IHQCarPropertyEventListener listener);
    oneway void unregisterListenerWithParameter(in HQRegisterParameter parameter, in IHQCarPropertyEventListener listener);

    MultiResponseBody getProperties(in MultiRequestBody body);

    // add string-key support
    HQCarPropertyValue getKeyProperty(in String key);
    HQCarPropertyValue getKeyPropertyWith(in String key, in HQCarPropertyExtParameter param);

    // add check api
    HQAPIConfig check(in String key);
}